package day4.homework;

import jdk.internal.org.objectweb.asm.tree.analysis.Value;

import java.lang.reflect.Field;

//通过反射定义一个方法可以实现修改任意对象的属性值
//通过反射定义一个方法可以实现获取任意对象的属性值
//提示：设置属性  setProperty(对象，属性名,新的属性值)
//获取属性  getProperty(对象，属性名)
public class TestInvokeField {
    String id ;
    String name;

    //设置属性方法
    //参数1：对象    参数2：属性名  参数3：新的属性值
    public static void setProperty(Object o,String name,Object value){
        Class c = o.getClass();
        try {
            Field f = c.getDeclaredField(name);
            f.setAccessible(true);
            f.set(o,value);
            System.out.println(name+"的属性值设置成功");
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    //获取属性方法
    //参数1：对象    参数2：属性名
    public static void getProperty(Object o,String name) {
        Class c = o.getClass();
        Object value = null;
        try {
            Field f = c.getDeclaredField(name);
            f.setAccessible(true);
            value = f.get(o);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        System.out.println(name+"的属性值是："+value);
    }
    public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
        TestInvokeField tif = new TestInvokeField();
        setProperty(tif,"id","1");
        setProperty(tif,"name","陈11");
        getProperty(tif,"id");
        getProperty(tif,"name");
    }
}
